perm filename EBOS.XGP[1,JMC] blob sn#837512 filedate 1987-03-26 generic text, type T, neo UTF8
/LMAR=0/XLINE=3/USET=19␈↓ α,␈↓␈↓ ⊂F1


␈↓ α,␈↓α␈↓ ¬@EBOS - A Projected Editor-Based Operating System

␈↓ α,␈↓α␈↓ ε5by John McCarthy, Stanford University

␈↓ α,␈↓␈↓ α|In␈α⊂our␈α⊂view␈α⊂present␈α⊂operating␈α⊂systems␈α⊂are␈α⊂obsolete␈α⊂in␈α⊂a␈α⊂variety␈α⊂of␈α⊂ways.␈α⊂ They␈α⊂were␈α⊂lacking
␈↓ α,␈↓in␈α_systematic␈α_design␈α_to␈α_begin␈α_with␈α_and␈α_have␈α_gotten␈α_worse␈α_as␈α_ad␈α_hoc␈α_features␈α_with␈α_ad␈α_hoc
␈↓ α,␈↓syntaxes␈α&have␈α&been␈α&added.␈α& This␈α&criticism␈α&includes␈α&WAITS,␈α&ITS,␈α&TOPS-20,␈α&UNIX,
␈↓ α,␈↓MULTICS, and VM.  Here are some principles for a new one.

␈↓ α,␈↓␈↓ α|1.␈α∩While␈α∩some␈α∩of␈α∩the␈α∩proposed␈α∩features␈α∩exist␈α∩in␈α∩present␈α∩systems,␈α∩these␈α∩systems␈α∩have␈α∩grown
␈↓ α,␈↓gradually␈α↔and␈α↔are␈α↔not␈α↔integrated␈α↔wholes.␈α↔ Perhaps␈α↔MULTICS␈α↔is␈α↔an␈α↔exception␈α↔here,␈α↔but␈α↔its
␈↓ α,␈↓authors␈α∪chose␈α∪to␈α∪emphasize␈α∪security␈α∪features␈α∪that␈α∪have␈α∪not␈α∪been␈α∪important␈α∪for␈α∪generally␈α∪used
␈↓ α,␈↓operating␈α∂systems.␈α∂ Some␈α∂other␈α∂e≥orts␈α∂to␈α∂plan␈α∂a␈α∂system␈α∂from␈α∂scratch␈α∂have␈α∂failed,␈α∂largely␈α∂because
␈↓ α,␈↓they got too complicated.  This one will be kept as simple as is compatible with its objectives.

␈↓ α,␈↓␈↓ α|2.␈α↔The␈α↔command␈α↔language␈α↔will␈α↔be␈α↔a␈α↔sugared␈α↔programming␈α↔language␈α↔¬-in␈α↔fact,␈α↔sugared
␈↓ α,␈↓Lisp.␈α⊃ The␈α⊃user␈α⊃will␈α⊃have␈α⊃the␈α⊃full␈α⊃capability␈α⊃of␈α⊃Lisp␈α⊃in␈α⊃compounding␈α⊃the␈α⊃basic␈α⊃operations␈α⊃into
␈↓ α,␈↓command␈α⊃programs,␈α⊃i.e.␈α⊃ macros␈α⊃(called␈α⊃execs␈α⊃in␈α⊃IBMese).␈α⊃ In␈α⊃our␈α⊃examples,␈α⊃we␈α⊃sugar␈α⊃the␈α⊃Lisp
␈↓ α,␈↓by␈α⊗using␈α⊗conventional␈α⊗functional␈α⊗notation,␈α⊗but␈α⊗"command␈α⊗programs"␈α⊗will␈α⊗have␈α⊗Lisp␈α⊗internal
␈↓ α,␈↓notation␈α format.␈α  Whether␈α they␈α will␈α be␈α represented␈α as␈α list␈α structure␈α isn't␈α decided.␈α  File
␈↓ α,␈↓operations, compiling, etc. will be treated as functions, e.g. one will have statements like

␈↓ α,␈↓␈↓ α|␈↓↓foo.bin := fortran(foo.for)␈↓.

␈↓ α,␈↓The␈α∪function␈α∪␈↓↓fortran␈↓␈α∪then␈α∪represents␈α∪the␈α∪e≥ect␈α∪of␈α∪the␈α∪Fortran␈α∪compiler␈α∪and␈α∪can␈α∪be␈α∪composed
␈↓ α,␈↓with␈α_other␈α_functions.␈α_ The␈α_Unix␈α↔pipes␈α_provide␈α_for␈α_composition␈α_of␈α_functions␈α_but␈α_in␈α_a␈α_non-
␈↓ α,␈↓standard␈α~syntax␈α~and␈α~make␈α~the␈α~curious␈α~assumption␈α~that␈α~all␈α~functions␈α~are␈α~unary.␈α~ We␈α~will
␈↓ α,␈↓consider␈α∂carrying␈α∂this␈α∂functional␈α∂idea␈α∂to␈α∂an␈α∂extreme.␈α∂ Namely,␈α∂typing␈α∂a␈α∂single␈α∂text␈α∂character␈α∂to␈α∂a
␈↓ α,␈↓text editor may be regarded as executing an assignment statement of the form

␈↓ α,␈↓(1) ␈↓↓≡le := insert(≡le,char,place)␈↓.

␈↓ α,␈↓Operations␈α∪on␈α∪≡les␈α∪are␈α∪also␈α∪obvious␈α∪candidates␈α∪to␈α∪be␈α∪regarded␈α∪assignment␈α∪statements␈α∪and␈α∪will
␈↓ α,␈↓be compoundable in such statements as

␈↓ α,␈↓␈↓ α|␈↓↓foo.bin,foo.error := fortran(append(foo1.for,precompile(foo2.alg))␈↓.

␈↓ α,␈↓␈↓ α|The␈α∪requirement␈α∪of␈α∪programmability␈α∪means␈α∪that␈α∪whatever␈α∪compound␈α∪operations␈α∪the␈α∪user
␈↓ α,␈↓can␈α⊃do␈α⊃himself,␈α⊃he␈α⊃can␈α⊃conveniently␈α⊃make␈α⊃command␈α⊃programs␈α⊃do␈α⊃for␈α⊃him.␈α⊃ Of␈α⊃course,␈α⊃it␈α⊃must
␈↓ α,␈↓be␈α⊂convenient␈α⊂to␈α⊂include␈α⊂conditionals␈α⊂in␈α⊂command␈α⊂programs,␈α⊂and␈α⊂this␈α⊂is␈α⊂where␈α⊂most␈α⊂macro␈α⊂and
␈↓ α,␈↓exec␈α∪systems␈α∪fall␈α∪down.␈α∪ Conditionals␈α∪are␈α∪an␈α∪afterthought␈α∪and␈α∪are␈α∪done␈α∪awkwardly.␈α∪ Keeping
␈↓ α,␈↓the␈α⊗command␈α⊗language␈α⊗programmable␈α⊗is␈α⊗to␈α⊗have␈α⊗a␈α⊗higher␈α⊗priority␈α⊗than␈α⊗making␈α⊗the␈α⊗system
␈↓ α,␈↓controllable␈α∂by␈α∂the␈α∂mouse.␈α∂ Thus␈α∂any␈α∂control␈α∂operations␈α∂involving␈α∂a␈α∂mouse␈α∂are␈α∂sugared␈α∂versions
␈↓ α,␈↓of the basic language.

␈↓ α,␈↓␈↓ α|3.␈α⊗The␈α⊗command␈α⊗language,␈α⊗the␈α⊗editor␈α⊗language␈α⊗and␈α⊗any␈α⊗others␈α⊗provided␈α⊗as␈α⊗part␈α⊗of␈α⊗the
␈↓ α,␈↓system␈α≠will␈α≠obey␈α≠what␈α≠may␈α≠be␈α≠called␈α≠the␈α≠"Chomsky␈α≠principle".␈α≠ Chomsky␈α≠claimed␈α≠in␈α≠his
␈↓ α,␈↓␈↓↓Re∨ections␈α∀on␈α∀language␈↓␈α∀that␈α∀human␈α∀languages␈α∀have;␈α∀some␈α∀linguists␈α∀dispute␈α∀this.␈α∀ Anyway␈α∀we
␈↓ α,␈↓want␈α∂it.␈α∂ Namely,␈α∂the␈α∂syntax␈α∂never␈α∂requires␈α∂a␈α∂constant␈α∂at␈α∂any␈α∂point.␈α∂ It␈α∂will␈α∂always␈α∂accept␈α∂a␈α∂term
␈↓ α,␈↓designating␈α∪an␈α∪entity␈α∪of␈α∪the␈α∪required␈α∪type.␈α∪ Thus␈α∪whereever␈α∪a␈α∪≡le␈α∪name␈α∪is␈α∪acceptable,␈α∪an␈α∪≡le-
␈↓ α,␈↓␈↓ ⊂F2


␈↓ α,␈↓valued␈α$expression,␈α$e.g.␈α$ a␈α$≡le-valued␈α$conditional␈α$expression,␈α$is␈α$also␈α$acceptable.␈α$ Many
␈↓ α,␈↓programming languages have this property, but no operating systems I know about.

␈↓ α,␈↓␈↓ α|4.␈α⊂The␈α⊂sugaring␈α⊂will␈α⊂be␈α⊂both␈α⊂syntactic␈α⊂and␈α⊂semantic.␈α⊂ Syntactically,␈α⊂one␈α⊂will␈α⊂simply␈α⊂type␈α⊂the
␈↓ α,␈↓character␈α≤while␈α≤in␈α≤a␈α≤context␈α≤in␈α≤which␈α≤typing␈α≤the␈α≤character␈α≤inserts␈α≤it␈α≤in␈α≤the␈α≤≡le.␈α≤ Other
␈↓ α,␈↓operations will be sugared in appropriate ways, e.g. one can write

␈↓ α,␈↓(2) ␈↓↓fortran(foo)␈↓

␈↓ α,␈↓for the above assignment statement.

␈↓ α,␈↓␈↓ α|5.␈α∂By␈α∂semantic␈α∂sugar␈α∂we␈α∂mean␈α∂that␈α∂in␈α∂appropriate␈α∂contexts,␈α∂the␈α∂operations␈α∂that␈α∂are␈α∂the␈α∂most
␈↓ α,␈↓obvious␈α∂interpretations␈α∂of␈α∂the␈α∂base␈α∂forms␈α∂are␈α∂not␈α∂carried␈α∂out,␈α∂but␈α∂something␈α∂easier␈α∂is␈α∂done.␈α∂ For
␈↓ α,␈↓example,␈α∪(1)␈α∪above␈α∪doesn't␈α∪make␈α∪a␈α∪new␈α∪copy␈α∪of␈α∪the␈α∪≡le,␈α∪but␈α∪merely␈α∪inserts␈α∪a␈α∪character␈α∪in␈α∪the
␈↓ α,␈↓core image of the ≡le.

␈↓ α,␈↓␈↓ α|6.␈α_By␈α_editor-based,␈α_we␈α_mean␈α_that␈α_the␈α_user␈α_is␈α_always␈α_interacting␈α_with␈α_the␈α_system␈α_via␈α_a
␈↓ α,␈↓powerful␈α⊂editor,␈α⊂e.g.␈α⊂something␈α⊂like␈α⊂EMACS.␈α⊂ All␈α⊂input␈α⊂is␈α⊂available␈α⊂in␈α⊂the␈α⊂editor␈α⊂for␈α⊂re-editing
␈↓ α,␈↓and␈α⊃re-submission,␈α⊃and␈α⊃all␈α⊃output␈α⊃is␈α⊃available␈α⊃for␈α⊃editing.␈α⊃ This␈α⊃facility␈α⊃has␈α⊃been␈α⊃useful␈α⊃in␈α⊃the
␈↓ α,␈↓E␈α∂editor␈α∂on␈α∂WAITS␈α∂but␈α∂requires␈α∂substantial␈α∂expansion.␈α∂ Most␈α∂interactive␈α∂programs␈α∂will␈α∂be␈α∂able
␈↓ α,␈↓to␈α∩forgo␈α∩editing␈α∩features␈α∩of␈α∩their␈α∩own,␈α∩thus␈α∩simplifying␈α∩them.␈α∩ Naturally,␈α∩certain␈α∩programs␈α∩will
␈↓ α,␈↓want to do their own editing.

␈↓ α,␈↓␈↓ α|7.␈α∪It␈α∪is␈α∪time␈α∪to␈α∪allow␈α∪the␈α∪user␈α∪arbitrary␈α∪character␈α∪sets.␈α∪ This␈α∪presents␈α∪no␈α∪di≠culty␈α∪for␈α∪the
␈↓ α,␈↓internal␈α≠operation␈α≠of␈α≠editors,␈α≠and␈α≠only␈α≠requires␈α≠that␈α≠they␈α≠admit␈α≠and␈α≠recognize␈α≠that␈α≠some
␈↓ α,␈↓characters␈α≡are␈α≡represented␈α≡by␈α≡multiple␈α≡bytes.␈α≡ Similarly␈α≡bit␈α≡map␈α≡displays␈α≡(IBMese␈α≡APA
␈↓ α,␈↓displays) allow the display of arbitrary characters.

␈↓ α,␈↓␈↓ α|8.␈α⊗The␈α⊗major␈α⊗problem␈α⊗in␈α⊗allowing␈α⊗arbitrary␈α⊗character␈α⊗sets␈α⊗involves␈α⊗keyboards.␈α⊗ We␈α⊗will
␈↓ α,␈↓discuss␈α~this␈α~further␈α~later,␈α~but␈α~for␈α~now␈α~we␈α~only␈α~point␈α~out␈α~the␈α~goal␈α~that␈α~special␈α~keyboards
␈↓ α,␈↓emphasizing␈α⊃a␈α⊃particular␈α⊃character␈α⊃sets␈α⊃will␈α⊃be␈α⊃kept␈α⊃entirely␈α⊃compatible␈α⊃with␈α⊃getting␈α⊃the␈α⊃special
␈↓ α,␈↓characters␈α⊗on␈α⊗general␈α⊗purpose␈α⊗keyboards␈α⊗built␈α⊗by␈α⊗people␈α⊗with␈α⊗no␈α⊗ideas␈α⊗about␈α⊗the␈α⊗particular
␈↓ α,␈↓character␈α∃set.␈α∃ Indeed␈α∃neither␈α∃the␈α∃operating␈α∃system␈α∃nor␈α∃the␈α∃users␈α∃program␈α∃need␈α∃know␈α∃which
␈↓ α,␈↓kind of keyboard is being used.

␈↓ α,␈↓␈↓ α|9.␈α∃Present␈α∃small␈α∃computer␈α∃operating␈α∃systems␈α∃were␈α∃designed␈α∃in␈α∃the␈α∃era␈α∃of␈α∃small␈α∃memories
␈↓ α,␈↓and␈α∀purport␈α∀to␈α∀keep␈α∀this␈α∀fact␈α∀invisible␈α∀to␈α∀the␈α∀user.␈α∀ For␈α∀example,␈α∀Unix␈α∀was␈α∀designed␈α∀for␈α∀the
␈↓ α,␈↓PDP-11␈α_that␈α_has␈α_32K␈α_16␈α_bit␈α_words␈α_of␈α_addressability.␈α_ The␈α_e≥ect␈α_is␈α_that␈α_simple␈α_operations
␈↓ α,␈↓involve␈α∂multiple␈α∂disk␈α∂operations␈α∂and␈α∂are␈α∂distressingly␈α∂slow.␈α∂ EBOS␈α∂will␈α∂take␈α∂advantage␈α∂of␈α∂large
␈↓ α,␈↓memories;␈α⊂we␈α⊂are␈α⊂quite␈α⊂prepared␈α⊂to␈α⊂make␈α⊂a␈α⊂system␈α⊂that␈α⊂won't␈α⊂run␈α⊂with␈α⊂less␈α⊂than␈α⊂4␈α⊂megabytes␈α⊂if
␈↓ α,␈↓that␈α⊃will␈α⊃make␈α⊃the␈α⊃system␈α⊃run␈α⊃faster␈α⊃and␈α⊃more␈α⊃smoothly.␈α⊃ The␈α⊃basic␈α⊃technique␈α⊃is␈α⊃to␈α⊃keep␈α⊃large
␈↓ α,␈↓amounts␈α⊗of␈α⊗directory␈α⊗information␈α⊗in␈α⊗main␈α⊗memory␈α⊗while␈α⊗the␈α⊗system␈α⊗is␈α⊗running.␈α⊗ If␈α⊗a␈α⊗user's
␈↓ α,␈↓command␈α⊂refers␈α⊂to␈α⊂certain␈α⊂≡les,␈α⊂our␈α⊂goal␈α∂is␈α⊂that␈α⊂the␈α⊂only␈α⊂disk␈α⊂operations␈α⊂executed␈α⊂are␈α⊂those␈α⊂that
␈↓ α,␈↓read and write those speci≡c ≡les.

␈↓ α,␈↓␈↓ α|10.␈α∀The␈α∀system␈α∀will␈α∀be␈α∀designed␈α∪to␈α∀be␈α∀e≠cient␈α∀with␈α∀very␈α∀large␈α∀numbers␈α∀of␈α∀≡les␈α∀and␈α∀with
␈↓ α,␈↓very large ≡les.  If a reader wishes to treat a book as a single ≡le, that should work e≠ciently.

␈↓ α,␈↓␈↓ α|[It␈α∂is␈α∂our␈α∂opinion␈α∂that␈α∂paging␈α∂has␈α∂basically␈α∂failed␈α∂in␈α∂its␈α∂goal␈α∂of␈α∂making␈α∂small␈α∂memories␈α∂look
␈↓ α,␈↓like␈α∨large␈α∨ones.␈α∨ It␈α∨is␈α∨useful␈α∨mainly␈α∨as␈α∨a␈α∨means␈α∨of␈α∨address␈α∨translation,␈α∨and␈α∨introduces
␈↓ α,␈↓␈↓ ⊂F3


␈↓ α,␈↓ine≠ciencies␈α→even␈α→when␈α→used␈α→for␈α→that.␈α→ The␈α→fastest␈α→computers,␈α→i.e.␈α→the␈α→Crays,␈α→don't␈α→use␈α→it.
␈↓ α,␈↓However,␈α∂it␈α∂looks␈α∂like␈α∂EBOS␈α∂will␈α∂be␈α∂implemented␈α∂on␈α∂computers␈α∂that␈α∂have␈α∂paging,␈α∂so␈α∂we'll␈α∂have
␈↓ α,␈↓to␈α∂minimize␈α∂the␈α∂e≥ects␈α∂of␈α∂its␈α∂ine≠ciencies.␈α∂ The␈α∂same␈α∂remarks␈α∂apply␈α∂to␈α∂a␈α∂lesser␈α∂degree␈α∂to␈α∂caches.
␈↓ α,␈↓In␈α⊃the␈α⊃long␈α⊃run␈α⊃it␈α⊃will␈α⊃probably␈α⊃turn␈α⊃out␈α⊃that␈α⊃memory␈α⊃hierarchies␈α⊃are␈α⊃more␈α⊃e≠ciently␈α⊃handled
␈↓ α,␈↓by compiled software than by built-in hardware features].

␈↓ α,␈↓α␈↓ εpTHE PRESENT EBOS PROJECT

␈↓ α,␈↓␈↓ α|Our␈α↔present␈α↔plan␈α↔is␈α↔to␈α↔do␈α↔the␈α↔EBOS␈α↔project␈α↔on␈α↔the␈α↔IBM␈α↔RT-PC␈α↔computer␈α↔using␈α↔the
␈↓ α,␈↓Berkeley␈α∩Unix␈α∩4.2␈α∩kernel.␈α∩ Thus␈α∩EBOS␈α∩will␈α∩be␈α∩a␈α∩Unix␈α∩shell.␈α∩ Present␈α∩indications␈α∩are␈α∩that␈α∩we
␈↓ α,␈↓won't␈α!lose␈α!too␈α!much␈α!in␈α!functionality␈α!or␈α!e≠ciency␈α!by␈α!this␈α!compromise␈α!with␈α!sin.␈α! The
␈↓ α,␈↓programming language will be some variety of Common Lisp.

␈↓ α,␈↓This ≡le is ebos[w86,jmc] and was pubbed on March 26, 1987 at 14:37.  Notes:

␈↓ α,␈↓declarative␈α⊂information␈α⊂editor␈α⊂functions␈α⊂are␈α⊂programs␈α⊂and␈α⊂can␈α⊂be␈α⊂used␈α⊂by␈α⊂programs␈α⊂directories
␈↓ α,␈↓as data structures programs communicating with one another telnet etc. available to programs
/FONT#0=BASL10[300,SYS]/FONT#1=BASI10[300,SYS]=≡∨ (),.12:=Rabcdefghilmnoprstuu/FONT#2=BASB10[300,SYS]= ,-ABCEHJMNOPRSTUabcdefghijmnoprstvyy